#ifndef _SE_WINDOWEVENT_
#define _SE_WINDOWEVENT_

#include "Events/Event.hpp"

namespace SE
{
    class WindowEvent : public Event
    {
    public:
        WindowEvent() = default;
        virtual ~WindowEvent() = default;
    };

    class WindowResizeEvent final : public WindowEvent
    {
    public:
        const U64 width;
        const U64 height;

        explicit WindowResizeEvent(
            const U64 _width,
            const U64 _height)
            : width(_width),
              height(_height) {}

        virtual ~WindowResizeEvent() = default;
    };

    class WindowMoveEvent final : public WindowEvent
    {
    public:
        const I32 x;
        const I32 y;

        explicit WindowMoveEvent(
            const I32 _x,
            const I32 _y)
            : x(_x),
              y(_y) {}

        virtual ~WindowMoveEvent() = default;
    };

    class WindowShouldCloseEvent final : public WindowEvent
    {
    public:
        WindowShouldCloseEvent() = default;
        virtual ~WindowShouldCloseEvent() = default;
    };
} // !namespace SE

#endif // !_SE_WINDOWEVENT_